<?php

namespace App\Http\Controllers\Test;

use App\Http\Controllers\Controller;
use App\Models\ArticleCollect;
use App\Models\News;
use App\Models\Admin;
use App\Models\Topic;
use App\Service\Dir;
use Illuminate\Support\Facades\DB;

class CacheController extends Controller
{
    // TODO 缓存测试

    /**
     *
     * TODO 测试（第一次查询sql，第二次查询没有sql）
     *
     * 1、单个缓存查询：
     * 2、修改，删除等操作：删除缓存
     * 3、列表缓存：
     * 4、添加，修改，删除等操作：删除缓存
     * 5、关联查询缓存：
     * 6、关联的添加，修改，删除等：删除缓存
     *
     */


    // 模型缓存

    // 1、单个缓存查询：
    // http://www.slh.com/test/cache/show
    public function show()
    {
        $db     = new Topic();
        $info   = $db->isCache(true)->oneFind(['id' => 5]);
        $sqls   = $db->getSql();
        $result = ['sql' => $sqls, 'info' => $info,];

        return $this->success($result);
    }

    // 2、修改，删除等操作：删除缓存
    public function edit()
    {
        // ->isCache(true) 更新缓存
        $model = new  Topic();
        $data  = ['title' => '哈哈名称'];
        $info  = $model->oneEdit(['id' => 5], $data);

        return $this->success($model->getSql(), '修改数据，删除列表缓存，删除详情缓存！');
    }

    // 3、修改，删除其他数据等操作：删除缓存
    public function edit2()
    {
        // ->isCache(true) 更新缓存
        $model = new  Topic();
        $data  = ['title' => '文化文章'];
        $info  = $model->oneEdit(['id' => 5], $data);

        return $this->success($model->getSql(), '修改其他数据，删除列表缓存，删除详情缓存！');
    }

    // 3、修改，删除其他数据等操作：没有删除列表缓存
    public function edit3()
    {
        // ->isCache(true) 更新缓存
        $model = new  Topic();
        $data  = ['title' => '文化文章'];
        $info  = $model->oneEdit(['id' => 8], $data);

        return $this->success($model->getSql(), '修改其他数据，删除列表缓存，删除详情缓存！');
    }

    // 修改改变：改变查询值，但不删除缓存
    public function change()
    {
        // ->isCache(true) 更新缓存
        $model = new  Topic();
        $data  = ['title' => '哈哈名称'];
        $info  = $model->isCache(true)->oneEdit(['id' => 2], $data);

        return $this->success($model->getSql(), '修改数据，不删除缓存');
    }

    // TODO 关注与订阅的缓存
    // TODO 话题：话题的订阅用户，用户订阅的话题列表

    // 绑定收藏缓存
    // 1、查询没有
    // 3、收藏后继续查询
    public function collect()
    {
        $model  = new ArticleCollect();
        $lists  = $model->getCollect('1');
        $sqls   = $model->getSql();
        $result = ['sql' => $sqls, 'lists' => $lists,];

        return $this->success($result);
    }

    // 2、查询
    public function onCollect()
    {
        $model  = new ArticleCollect();
        $result = $model->onCollect(1, 406, 'short');
        $this->throwIf($result === false, $model->getError());
        $msg = $result == 1 ? '收藏成功！！' : '取消收藏成功！！';

        return $this->success([], $msg);
    }

    // 3、列表缓存：
    // 缓存列表
    // http://www.slh.com/test/cache/lists
    public function lists()
    {
        $db     = new Topic();
        $where  = ['cate_id' => 1];
        $info   = $db->bangField('cate_id')->listPage($where, 1, 10, 'id ASC'); // 只影响该栏目的缓存
        $sqls   = $db->getSql();
        $result = ['sql' => $sqls, 'info' => $info,];

        return $this->success($result);
    }


    // 清理缓存
    public function clear()
    {
        // 清理过程中会产生日志 在清理日志目录就会报错
        // 所以这里不清理日志 logs
        // 'framework/cache/data',
        $dir     = new Dir();
        $channel = ['framework/bang.list', 'framework/bang.show', 'framework/field', 'framework/model', 'framework/logic', 'framework/response', 'framework/table', 'framework/views',];
        foreach($channel as $path){
            $path = storage_path($path);
            //echo '清空目录'.$path.chr(10);
            $dir->delDir($path, false);
        }

        return $this->success([], '删除所有缓存成功！！');
    }

    // 订阅话题
    // 取消订阅话题
    public function subscribe()
    {
        $model    = new UserSubscribe();
        $topic_id = 1;
        $uid      = 1;

        // 订阅
        // 取消订阅
        $model->onSubscribe($uid, $topic_id);

        return $this->success([], '订阅与取消订阅，用户订阅列表与话题订阅用户列表缓存清理！');
    }

    // 获取话题信息
    public function topicInfo()
    {
        $topId = 1;
        $where = ['id' => $topId];
        $model = new Topic();
        $info  = $model->isCache(true)->oneFind($where);

        return $this->success($info, '修改话题成功，用户订阅列表与话题订阅用户列表缓存清理！');
    }

    // 获取用户信息
    public function userInfo()
    {
        $uid   = 1;
        $where = ['id' => $uid];
        $model = new User();
        $info  = $model->isCache(true)->oneFind($where);

        return $this->success($info, '修改用户成功，用户订阅列表与话题订阅用户列表缓存清理！');
    }

    // 话题的订阅用户列表
    public function user()
    {
        $page     = 1;
        $rows     = 10;
        $topic_id = 1;
        $where    = ['topic_id' => $topic_id, 'status' => 1];
        $model    = new UserSubscribe();
        $result   = $model->isCache(true)->getUsers($where, $page, $rows, "id DESC");

        return $this->success($result);
    }

    // 用户的订阅话题列表
    public function topic()
    {
        $page   = 1;
        $rows   = 10;
        $uid    = 1;
        $where  = ["uid" => $uid, 'status' => 1];
        $model  = new UserSubscribe();
        $result = $model->isCache(true)->getTopic($where, $page, $rows, "id DESC");

        return $this->success($result);
    }

    // 获取多条数据的缓存
    public function ids()
    {
        $model  = new Topic();
        $ids    = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20];
        $result = $model->isCache(true)->getListInIds($ids);

        return $this->success($result);
    }

}


